Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 40d0b9a5deca5fb054946dfcf37d2442bdac4469


Parents : 40fc75f
Author : Mark Qvist <mark@unsigned.io>
Date : 2025-01-29T21:21:51+01:00

Added acceptance rate threshold to peer rotation

Changes

1 files changed, 9 insertions(+), 5 deletions(-)


Diff

diff --git a/LXMF/LXMRouter.py b/LXMF/LXMRouter.py
index 1d8f50e..df340d2 100644
--- a/LXMF/LXMRouter.py
+++ b/LXMF/LXMRouter.py
@@ -42,6 +42,7 @@ class LXMRouter:
AUTOPEER_MAXDEPTH = 4
FASTEST_N_RANDOM_POOL = 2
ROTATION_HEADROOM_PCT = 10
+ ROTATION_AR_MAX = 0.5
PROPAGATION_LIMIT = 256
DELIVERY_LIMIT = 1000
@@ -1867,13 +1868,16 @@ class LXMRouter:
reverse=False
)[0:drop_count]
- ms = "" if len(low_acceptance_rate_peers) == 1 else "s"
- RNS.log(f"Dropping {len(low_acceptance_rate_peers)} lowest acceptance rate peer{ms} to increase peering headroom", RNS.LOG_DEBUG)
+ dropped_peers = 0
for peer in low_acceptance_rate_peers:
ar = 0 if peer.offered == 0 else round((peer.outgoing/peer.offered)*100, 2)
- reachable_str = "reachable" if peer.alive else "unreachable"
- RNS.log(f"Acceptance rate for {reachable_str} peer {RNS.prettyhexrep(peer.destination_hash)} was: {ar}% ({peer.outgoing}/{peer.offered}, {peer.unhandled_message_count} unhandled messages)", RNS.LOG_DEBUG)
- self.unpeer(peer.destination_hash)
+ if ar < LXMRouter.ROTATION_AR_MAX*100:
+ reachable_str = "reachable" if peer.alive else "unreachable"
+ RNS.log(f"Acceptance rate for {reachable_str} peer {RNS.prettyhexrep(peer.destination_hash)} was: {ar}% ({peer.outgoing}/{peer.offered}, {peer.unhandled_message_count} unhandled messages)", RNS.LOG_DEBUG)
+ self.unpeer(peer.destination_hash)
+
+ ms = "" if dropped_peers == 1 else "s"
+ RNS.log(f"Dropped {dropped_peers} low acceptance rate peer{ms} to increase peering headroom", RNS.LOG_DEBUG)
except Exception as e:
RNS.log(f"An error occurred during peer rotation: {e}", RNS.LOG_ERROR)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────